//笛卡儿积组合
function descartes(list)
{
    //parent上一级索引;count指针计数
    var point  = {};
 
    var result = [];
    var pIndex = null;
    var tempCount = 0;
    var temp   = [];
 
    //根据参数列生成指针对象
    for(var index in list)
    {
        if(typeof list[index] == 'object')
        {
            point[index] = {'parent':pIndex,'count':0}
            pIndex = index;
        }
    }
 
    //单维度数据结构直接返回
    if(pIndex == null)
    {
        return list;
    }
 
    //动态生成笛卡尔积
    while(true)
    {
        for(var index in list)
        {
            tempCount = point[index]['count'];
            temp.push(list[index][tempCount]);
        }
 
        //压入结果数组
        result.push(temp);
        temp = [];
 
        //检查指针最大值问题
        while(true)
        {
            if(point[index]['count']+1 >= list[index].length)
            {
                point[index]['count'] = 0;
                pIndex = point[index]['parent'];
                if(pIndex == null)
                {
                    return result;
                }
 
                //赋值parent进行再次检查
                index = pIndex;
            }
            else
            {
                point[index]['count']++;
                break;
            }
        }
    }
}




var selectSpec = [ ['16G','64G','128G'] , ['土豪金','银色','黑色','pink'],['联通3G存费送餐','联通4G存费送餐','联通2G存费送餐'], ['76元套餐','106元套餐','206元套餐']];
 

var result=descartes(selectSpec);
console.log(result);
